Reporting Service API Documentation
Overview
This is a Spring Boot-based reporting service that handles immunization-related reports and data synchronization. The service reads data from a replica database and provides APIs for generating various immunization reports.
Base URL
text
/api/reports
Reporting Endpoints (ReportingResource.java)
1. Yearly Enrollment Summary
GET /summary-enrollment-yearly
Description: Get yearly enrollment summary report.
Query Parameters:
pId(optional): Program IDlocId(optional): Location IDcenter(optional): Center nametdate(optional): To date (dd-MM-yyyy)fdate(optional): From date (dd-MM-yyyy)
Response: List<Map<String, Object>>
2. Gender-Based Enrollment Report
GET /enrollment-by-gender
Description: Get enrollment statistics grouped by gender.
Query Parameters: Same as yearly enrollment summary
Response: List<Map<String, Object>>
3. Facts - Children FIC
GET /facts-children-fic
Description: Get facts about children's Fully Immunized Coverage (FIC).
Query Parameters:
locationId(optional): Location IDfilterDatefrom(required): Start date (dd-MM-yyyy)filterDateto(required): End date (dd-MM-yyyy)
Response: JSON String
4. Complete Facts Report
GET /facts-full
Description: Get comprehensive facts report.
Query Parameters:
locationId(optional): Location IDfilterDatefrom(required): Start date (dd-MM-yyyy)filterDateto(required): End date (dd-MM-yyyy)
Response: JSON String
5. Children Facts Report
GET /facts-children
Description: Get facts specific to children.
Query Parameters: Same as facts-full
Response: JSON String
6. General Facts Report
GET /facts
Description: Get general facts report.
Query Parameters: Same as facts-full
Response: JSON String
7. Targets Report
GET /targets
Description: Get target data for locations.
Query Parameters:
locationId(required): Location IDtypeValue1(optional): Filter for range fromtypeValue2(optional): Filter for range toconvertToMap(optional): Convert array to map with attributeName as keys
Response: JSON String (array or object based on convertToMap)
8. Coverage Report
GET /CoverageReport
Description: Get vaccination coverage report.
Query Parameters:
location(required): LocationfilterDatefrom(required): Start date (dd-MM-yyyy)filterDateto(required): End date (dd-MM-yyyy)vaccineId(required): Vaccine IDs (comma-separated)locationType(required): Location type
Response: Map<String, Object>
9. Enrollment by Center
GET /enrollmentByCenter
Description: Get enrollment statistics by center.
Query Parameters:
location(required): LocationfilterDatefrom(required): Start date (dd-MM-yyyy)filterDateto(required): End date (dd-MM-yyyy)eventType(required): Event type
Response: Map<String, Object>
10. Enrollment by Vaccinator
GET /enrollmentByVacc
Description: Get enrollment statistics by vaccinator.
Query Parameters: Same as enrollmentByCenter
Response: Map<String, Object>
11. TT Enrollment by Center
GET /ttEnrollByCenter
Description: Get Tetanus Toxoid enrollment by center.
Query Parameters: Same as enrollmentByCenter
Response: Map<String, Object>
12. TT Enrollment by Vaccinator
GET /ttEnrollByVaccinator
Description: Get Tetanus Toxoid enrollment by vaccinator.
Query Parameters: Same as enrollmentByCenter
Response: Map<String, Object>
13. Age-Appropriate Coverage
GET /ageAppropriate
Description: Get age-appropriate coverage statistics.
Query Parameters: Same as enrollmentByCenter
Response: Map<String, Object>
14. Immunization by Vaccinator
GET /immunizationByVacc
Description: Get immunization statistics by vaccinator.
Query Parameters: Same as enrollmentByCenter
Response: Map<String, Object>
15. Immunization by Center
GET /immunizationByCenter
Description: Get immunization statistics by center.
Query Parameters: Same as enrollmentByCenter
Response: Map<String, Object>
16. Refusal by Vaccinator
GET /refusalByVacc
Description: Get refusal statistics by vaccinator.
Query Parameters: Same as enrollmentByCenter
Response: Map<String, Object>
17. Refusal by Center
GET /refusalByCenter
Description: Get refusal statistics by center.
Query Parameters: Same as enrollmentByCenter
Response: Map<String, Object>
18. TT Immunization by Vaccinator
GET /TTImmunizationByVaccinator
Description: Get TT immunization statistics by vaccinator.
Query Parameters: Same as enrollmentByCenter
Response: Map<String, Object>
19. Immunization Visit by Vaccinator
GET /immunizationVisitByVaccinator
Description: Get immunization visit statistics by vaccinator.
Query Parameters: Same as enrollmentByCenter
Response: Map<String, Object>
20. Immunization TT by Center
GET /immunizationTTByCenter
Description: Get TT immunization statistics by center.
Query Parameters: Same as enrollmentByCenter
Response: Map<String, Object>
21. Daily Summary - Children Vaccination
GET /daily-summary-vaccinations-children
Description: Get daily summary of children vaccinations.
Query Parameters:
locationId(required): Location IDfilterDatefrom(required): Date (dd-MM-yyyy)
Response: JSON String
22. Fully Immunized Coverage by Location
GET /fic-by-location
Description: Get FIC statistics by location.
Query Parameters:
locationId(optional): Location IDlocType(optional): Location typefilterDatefrom(required): Start date (dd-MM-yyyy)filterDateto(required): End date (dd-MM-yyyy)
Response: JSON String
23. Attendance Graphs by Day
GET /attendance-graphs-by-day
Description: Get attendance statistics by day.
Query Parameters:
locationId(optional): Location IDfilterDatefrom(required): Start date (dd-MM-yyyy)filterDateto(required): End date (dd-MM-yyyy)
Response: JSON String
24. Attendance Graphs by Week & Location
GET /attendance-graphs-by-week-location
Description: Get weekly attendance statistics by location.
Query Parameters:
locationId(optional): Location IDfilterDatefrom(required): Start date (dd-MM-yyyy)filterDateto(required): End date (dd-MM-yyyy)locationType(optional): Location type
Response: List
25. Daily Summary - Full Vaccination
GET /daily-summary-vaccinations-full
Description: Get daily summary of full vaccinations.
Query Parameters:
locationId(required): Location IDfilterDatefrom(required): Date (dd-MM-yyyy)
Response: JSON String
26. Daily Summary - Women Vaccination
GET /daily-summary-vaccinations-women
Description: Get daily summary of women vaccinations.
Query Parameters: Same as daily summary full
Response: JSON String
27. Population-Based Coverage by District
GET /population-based-coverage/{locId}
Description: Get population-based coverage data by district.
Path Parameter:
locId(required): Location ID
Response: List<Map<String, Object>>
28. Yearly Immunization Monitoring
GET /immunization-monitoring-yearly
Description: Get yearly immunization monitoring data.
Query Parameters:
pId(optional): Program IDlocId(optional): Location IDcenter(optional): Centertdate(optional): To date (dd-MM-yyyy)fdate(required): From date (dd-MM-yyyy)
Response: List
29. Monthly Population-Based Immunization
GET /population-based-monthly-immunization
Description: Get monthly population-based immunization data.
Query Parameters:
- Same as yearly immunization monitoring
type(required): Report type
Response: List
30. Monthly Population-Based TT Immunization
GET /population-based-monthly-immunization-TT
Description: Get monthly population-based TT immunization data.
Query Parameters: Same as yearly immunization monitoring (except type)
Response: List
31. Defaulters Coverage by Vaccine
GET /defaulters-coverage-by-vaccine
Description: Get defaulters coverage statistics by vaccine.
Query Parameters: Same as yearly enrollment summary
Response: List
32. Dropout Rate by Year
GET /dropout-rate-by-year
Description: Get dropout rate statistics by year.
Query Parameters:
locId(optional): Location IDyear(optional): Year
Response: List
33. Defaulters Coverage by Vaccinator
GET /defaulters-coverage-by-vaccinator
Description: Get defaulters coverage statistics by vaccinator.
Query Parameters: Same as yearly enrollment summary
Response: List
34. District Targets
GET /get-district-targets
Description: Get district targets.
Query Parameters:
center(optional): Centertdate(optional): Date (dd-MM-yyyy)
Response: List
35. Follow-up Age Appropriate Summary
GET /summary-followup-age-appropriate
Description: Get follow-up age appropriate summary.
Query Parameters:
locId(optional): Location IDtdate(optional): To date (dd-MM-yyyy)fdate(optional): From date (dd-MM-yyyy)
Response: List
36. Live Entries for Vaccinators
GET /live_entries
Description: Get live entries for vaccinators.
Query Parameters:
locId(optional): Location IDdate(required): Date (dd-MM-yyyy)locationType(required): Location type
Response: List
37. Daily Summary
GET /daily-summary
Description: Get daily vaccination summary.
Query Parameters:
locationId(required): Location IDfilterDatefrom(required): Date (dd-MM-yyyy)
Response: JSON String
38. Defaulters Children List
GET /defaulters_list
Description: Get list of defaulters children.
Query Parameters:
API_KEY(optional): API keylocId(optional): Location IDtdate(optional): To date (dd-MM-yyyy)fdate(optional): From date (dd-MM-yyyy)vaccinatorId(optional): Vaccinator IDscheduledOnly(optional): Scheduled only flagtype(optional): Report type (PDF/JSON)
Response: List or PDF file
39. Monthly Summary Vaccinations
GET /monthly-summary-vaccinations
Description: Get monthly vaccination summary.
Query Parameters:
locationId(required): Location IDfilterDatefrom(required): Date (dd-MM-yyyy)
Response: JSON String
40. Zero Dose Report
GET /zero_dose
Description: Get zero dose report.
Query Parameters:
API_KEY(optional): API keylocId(optional): Location IDtdate(optional): To date (dd-MM-yyyy)fdate(optional): From date (dd-MM-yyyy)type(optional): Report type (PDF/JSON)
Response: List or PDF file
41. Compliance Report
GET /complianceReport
Description: Get compliance report.
Query Parameters:
locationId(optional): Location IDfilterDate(optional): Filter date (yyyy-MM or yyyy-MM-dd)crumb(optional): Crumb parametertype(optional): Report type (CSV/JSON)
Response: List<LinkedHashMap<String, Object>> or CSV file
42. Compliance Report V2
GET /complianceReportv2
Description: Get compliance report (enhanced version).
Query Parameters: Same as complianceReport
Response: List<Map<String, Object>> or CSV file
43. Daily Register
GET /dailyRegister
Description: Get daily vaccination registry.
Query Parameters:
API_KEY(optional): API keylocId(optional): Location IDtdate(optional): Date (dd-MM-yyyy)outOfArea(optional): Out of area flagvaccinatorId(optional): Vaccinator IDtype(optional): Report type (PDF/JSON)
Response: List or PDF file
44. Compliance Coverage Graph
GET /complianceCoverageGraph
Description: Get compliance coverage graph data.
Query Parameters:
location(required): LocationfilterDatefrom(required): Start date (dd-MM-yyyy)filterDateto(required): End date (dd-MM-yyyy)locationType(required): Location type
Response: Map<String, Object>
45. Zero Dose Graph
GET /zeroDoseGraph
Description: Get zero dose graph data.
Query Parameters:
location(required): LocationfilterDatefrom(required): Date (dd-MM-yyyy)
Response: Map<String, Object>
46. Compliance Graph Monthly
GET /complianceGraphMonthly
Description: Get monthly compliance graph data.
Query Parameters:
location(required): LocationfilterDatefrom(required): Date (dd-MM-yyyy)
Response: Map<Integer, Object>
47. Compliance Graphs by Week
GET /compliance-graphs-by-week
Description: Get weekly compliance graph data.
Query Parameters:
locationId(optional): Location IDfilterDatefrom(required): Start date (dd-MM-yyyy)filterDateto(required): End date (dd-MM-yyyy)locationType(optional): Location type
Response: List
48. Child Registry
GET /childRegistry
Description: Get child registry records.
Query Parameters:
API_KEY(optional): API keylocId(optional): Location IDtdate(optional): To date (dd-MM-yyyy)fdate(optional): From date (dd-MM-yyyy)type(optional): Report type (PDF/JSON)
Response: List or PDF file
49. Attendance Summary
GET /attendanceSummary
Description: Get attendance summary.
Query Parameters:
locationId(optional): Location IDfilterDate(optional): Filter date (yyyy-MM or yyyy-MM-dd)type(optional): Report type
Response: List<LinkedHashMap<String, Object>>
50. Attendance Summary V2
GET /attendanceSummaryV2
Description: Get attendance summary (enhanced version).
Query Parameters: Same as attendanceSummary
Response: List<Map<String, Object>>
51. Attendance Deficient Vaccinators
GET /attendanceDeficientVaccinator
Description: Get list of attendance deficient vaccinators.
Query Parameters: Same as attendanceSummary
Response: List<Map<String, Object>>
52. Stock Report
GET /stockReport
Description: Get stock report.
Query Parameters:
locationId(optional): Location IDfilterDate(optional): Filter date (yyyy-MM or yyyy-MM-dd)type(optional): Report type (CSV/JSON)
Response: List<LinkedHashMap<String, Object>> or CSV file
53. Attendance Breakdown
GET /attendance_breakdown
Description: Get daily attendance breakdown.
Query Parameters:
locId(optional): Location IDdatefrom(optional): Start date (dd-MM-yyyy)date(required): Date (dd-MM-yyyy)range(optional): Range type (daywise)locationType(required): Location type
Response: List
54. Women Defaulters List
GET /women_defaulters_list
Description: Get women defaulters list.
Query Parameters:
API_KEY(optional): API keylocId(optional): Location IDvaccinatorId(optional): Vaccinator IDtdate(optional): To date (dd-MM-yyyy)fdate(optional): From date (dd-MM-yyyy)scheduledOnly(optional): Scheduled only flagtype(optional): Report type (PDF/JSON)
Response: List or PDF file
55. Women Identified List
GET /women_identified_list
Description: Get women identified list.
Query Parameters: Same as women defaulters list
Response: List or PDF file
56. Facts Incentives
GET /factsIncentives
Description: Get facts about incentives.
Query Parameters:
locationId(optional): Location IDfilterDatefrom(required): Start date (dd-MM-yyyy)filterDateto(required): End date (dd-MM-yyyy)
Response: JSON String
57. Facts MCCT Stats
GET /factsMcctStats
Description: Get facts about MCCT statistics.
Query Parameters: Same as facts incentives
Response: JSON String
58. Coverage Change MCCTS
GET /coverage-change-mccts
Description: Get yearly immunization coverage for MCCTS.
Query Parameters:
locId(optional): Location IDtdate(optional): To date (dd-MM-yyyy)fdate(required): From date (dd-MM-yyyy)
Response: List
59. Flagged to Resolve MCCTS
GET /flagged-to-resolve-mccts
Description: Get cases flagged for resolution in MCCTS.
Query Parameters: Same as coverage change MCCTS
Response: List
60. Timeliness Graph MCCTS
GET /timeliness-graph-mccts
Description: Get timeliness graph data for MCCTS.
Query Parameters: Same as coverage change MCCTS
Response: List
Data Synchronization Endpoints (DataRestResource.java)
61. Get Updated Data
GET /api/reports/immunization/getUpdatedData
Description: Get updated/new entities data for synchronization.
Query Parameters:
locationId(required): Location IDlastSyncedTime(required): Last synchronization timestampentityType(required): Entity typedataOffset(required): Data offsetpageSize(optional, default=500): Page size
Response: JSON String
Example Response:
json
{
"status": "success",
"data": [...],
"nextOffset": "..."
}
DHIS2 Integration Endpoints (DHIS2ReportingController.java)
62. Get DHIS2 Data
GET **/api/reports/dhis2/data
Description: Get data formatted for DHIS2 integration/export.
Query Parameters:
-
date(required): Reporting date -
limit(required): Number of records to return -
offset(required): Pagination offset -
Response:
List<DHIS2DataDTO>
Example Request:
text
GET /api/reports/dhis2/data?date=2024-01-15&limit=100&offset=0
HPV Reporting Endpoints (HPVResources.java)
63. Get All HPV Daily Counts
GET **/api/hpv/daily-count
Description: Get all HPV daily vaccination counts.
Query Parameters: None
- Response:
List<HpvDailyCount>
64. Get HPV Daily Count by Date
GET /api/hpv/daily-count/{id}
Description: Get HPV daily count for a specific date.
Path Parameter:
id(required): Date in ISO format (YYYY-MM-DD)
Response: HpvDailyCount or 404 if not found
Example Request:
text
GET /api/hpv/daily-count/2024-01-15
---
65. Get HPV Dashboard Records
GET /api/hpv/dashboard-list
Description: Get filtered HPV vaccination records for dashboard display with pagination.
Query Parameters:
-
dateFrom(optional): Start date filter (yyyy-MM-dd) -
dateTo(optional): End date filter (yyyy-MM-dd) -
limit(optional, default=10): Number of records per page -
offset(optional): Pagination offset (used to calculate page number) -
Response:
List<HPVDashboardDTO>
Paging Logic:
-
Page = offset / limit (if both provided)
-
Default page size = 10
-
Sorted by creation date ascending
Example Request:
text
GET /api/hpv/dashboard-list?dateFrom=2024-01-01&dateTo=2024-01-31&limit=20&offset=0
---
Defaulters Management Endpoints (DefaultersResources.java)
66. Get Defaulters Children List
GET /api/defaulters/children
Description: Get list of children who are defaulters (missed vaccinations) with pagination and filtering.
Query Parameters:
-
ucInclusion(required): UC inclusion criteria (e.g., "inside", "outside") -
status(required): Status filter (e.g., "SCHEDULED", "MISSED") -
locId(required): Location ID -
filterDateFrom(required): Start date for filtering -
filterDateTo(required): End date for filtering -
age(required): Age filter criteria -
startRecord(required): Starting record number (0-based) -
limit(required): Number of records to return -
Response:
DefaulterListChildDTOcontaining total count and data
Special Logic:
-
When
limit= 100000000: Returns all records and uses result size as total count -
Otherwise: Executes separate count query for total rows
Example Request:
text
GET /api/defaulters/children?ucInclusion=inside&status=SCHEDULED&locId=123&filterDateFrom=2024-01-01&filterDateTo=2024-01-31&age=12&startRecord=0&limit=50
Database Procedures Used
The service calls various stored procedures in the database:
Main Procedures:
unfepi_dwh.SummaryEnrollmentYearlyunfepi_dwh.SummaryGenderBasedunfepi.FactsChildrenFICProcedureunfepi.FactsChildrenProcedureunfepi.FactsQueryProcedureunfepi_dwh.CoverageReportunfepi_dwh.SummaryEnrByCenterCohortunfepi_dwh.SummaryEnrByVaccinatorunfepi_dwh.SummaryTTEnrByCenterCohortunfepi_dwh.SummaryTTEnrByVaccinatorCohortunfepi_dwh.SummaryFollowupAgeAppropriateunfepi_dwh.SummaryImmunizationByVaccinatorunfepi_dwh.SummaryImmunizationByCenterunfepi_dwh.SummaryRefusalByVaccinatorunfepi_dwh.SummaryRefusalByCenterunfepi_dwh.SummaryTTImmunizationByVaccinatorunfepi_dwh.SummaryImmunizationVisitByVaccinatorunfepi_dwh.SummaryImmunizationTTByCenterVaccinatorAttendanceDayWiseunfepi_dwh.SummaryImmunizationByYearPopulationBasedCoverageVaccinationPopulationBasedCoverageVaccinationTTunfepi_dwh.SummaryDefaultersCoveredByVaccineunfepi_dwh.DropoutRateunfepi_dwh.SummaryDefaultersCoveredByVaccinatorGetAncestryLocationAttributeParentByCenterIdunfepi.VaccinatorLiveEntriesByVaccinatorunfepi.VaccinatorLiveEntriesByLocationunfepi_dwh.DefaulterListChildunfepi_dwh.DefaultersCoverageListZeroDoseReportunfepi.DailyVaccinationRegistryunfepi_dwh.ComplianceGraphByLocationunfepi_dwh.ZeroDoseCoverageGraphunfepi_dwh.complianceGraphMonthlyunfepi_dwh.ComplianceWeekWiseunfepi.ZeroDoseFromChildRegistryunfepi.AttendanceSummaryunfepi.stockReportunfepi_dwh.DefaulterListWomenunfepi_dwh.IdentifiedListWomenunfepi.SummaryCaseResolutionunfepi_dwh.SummaryTimelinessByYear
🔧 Technical Details
Dependencies:
- Framework: Spring Boot
- Database: MySQL
- Template Engine: JasperReports (for PDF generation)
- JSON Libraries: org.codehaus.jettison
- Date/Time: Joda Time
Key Components:
- JdbcTemplate: Used for all database operations
- LocationRepository: Spring Data JPA repository for Location entity
- ReportsDownloadResource: Helper class for report downloads (PDF/CSV)
- DataQuery: Enum containing SQL queries
- ResponseBuilder: Utility for building JSON responses
Data Models Used:
LocationVaccinatorUserOrganizationLeaveManagementComplianceManagementVaccinationCenterCloseDayPublicHoliday
Date Format:
- Input dates:
dd-MM-yyyy - Database dates:
yyyy-MM-dd - Month-only formats:
yyyy-MM
Error Handling
Common Error Responses:
- Invalid Date Format: Returns empty result or default values
- Database Errors: Returns empty collections (
[],{}) - Missing Parameters: May return null or empty results
Exception Handling:
- Most methods catch exceptions and return empty results
- Stack traces are printed to console
- PDF generation errors return error messages
Integration Notes
Migration from Zindagi Mehfooz (ZM):
- Data Source: Reads from replica database
- API Gateway: All reporting calls should be routed to this service
- Performance: Designed for heavy report generation
- Separation of Concerns: Separates reporting logic from main application
Caching Strategy:
Consider implementing caching for:
- Frequently accessed reports
- Master data (locations, vaccinators)
- Aggregated statistics
Security:
- API_KEY parameter used for some endpoints
- Consider adding JWT authentication for production
Monitoring & Logging
Key Metrics to Monitor:
- Response times for each report type
- Database query performance
- Memory usage during PDF generation
- API error rates
Logging Recommendations:
- Log all API calls with parameters
- Track report generation times
- Monitor database connection pool usage
- Log PDF/CSV generation statistics
Scalability Considerations
Horizontal Scaling:
- Stateless service design
- Database connection pooling
- External session management if needed
Performance Optimization:
- Database Indexing: Ensure proper indexes on report tables
- Query Optimization: Regular review of stored procedures
- Pagination: Implement for large datasets
- Async Processing: Consider for heavy reports
Deployment:
- Containerize with Docker
- Use orchestration (Kubernetes)
- Implement health checks
- Set up auto-scaling rules